![]()
![]()
![]()
Normals
Labels
- ASCII
Normal
- Binary
nrml
(=0x6E726D6C
)Data Format
Vector3D normalField descriptions
- normal
- The surface normal at a vertex. This vector should be normalized.
Data Size
12Description
The surface normal at a vertex of a verticed object is the average of the normals to the faces of that object sharing that vertex. This normal is obtained by normalizing the relevant face normal vectors, adding those vectors together, and normalizing the result. The surface normal vector is used in Gouraud shading calculations.Parent Hierarchy
Element, attribute.Parent Objects
Attribute sets. A normal always has a parent object.Child Objects
None.Example
Container ( AttributeSet ( ) Normal ( -1 0 0 ) )Ambient Coefficients
Labels
- ASCII
AmbientCoefficient
- Binary
camb (
=0x63616D62
)Data Format
Float32 ambientCoefficientField descriptions
ambientCoefficient
- The value of this field must lie in the closed interval [0, 1]. 0 is the minimum value, 1 is the maximum value.
Data Size
4Description
The ambient coefficient is a measure of the level of an object's reflection of ambient light. Ambient coefficients may be assigned separately and selectively to the facets and vertices of faceted and verticed objects, and the same ambient coefficient may be assigned to several objects by placing the coefficient in a suitably located attribute set.Parent Hierarchy
Element, attribute.Parent Objects
Attribute sets. An ambient coefficient always has a parent object.Child Objects
None.Example
Container ( AttributeSet ( ) AmbientCoefficient ( 0.5 ) DiffuseColor ( 1 1 1 ) )Highlight State
Labels
- ASCII
HighlightState
- Binary
hlst
(=0x686C7374
)Data Format
Boolean highlightedField descriptions
highlighted
- A value of
True
indicates that affected geometric objects are to receive the highlighting effects specified by an associated highlight style object during rendering. A value ofFalse
indicates that the affected objects are not to receive those effects.Data Size
4Description
A highlight state object is used to specify whether affected geometric objects are to receive highlighting effects during rendering. The relevant highlighting effects are specified by an associated highlight style object. If a geometric object's highlight state is set toTrue
(and an associated highlight style object has been defined), then any renderer that supports highlighting will apply the attributes specified by the highlight style object to that geometric object when rendering; these attributes will override incompatible attributes assigned to that geometric object by other means. A highlight state object is idle if no associated highlight style object exists. See the section "Highlight Styles" on page -31 for complete details on highlight style objects.Parent Hierarchy
Element, attribute.Parent Objects
Attribute sets. A highlight state object always has a parent object.Child Objects
None.Example
Container ( Container ( HighlightStyle ( ) # highlight style object Container ( AttributeSet ( ) DiffuseColor ( 1 0 0 ) # highlighting: red color ) ) Container ( Polygon ( ... ) Container ( AttributeSet ( ) DiffuseColor ( 0 0 1 ) # polygon's normal color: blue HighlightState ( True ) # polygon is to be highlighted ) and will appear red when ) renderedAttribute Sets
Attribute Sets
Labels
- ASCII
AttributeSet
- Binary
attr
(=0x61747472
)Data Format
No data.Data Size
0Description
An attribute set is a collection of attributes to be applied to an object, a facet of an object, or a vertex of an object. An attribute set may include attribute objects of as many types as desired, but may include only one attribute object of any particular type. Thus, an attribute set may contain both a diffuse color attribute and a specular color attribute, but may not contain two diffuse color attributes.Though any attribute object may be included in any attribute set, some attributes cannot sensibly be applied to objects of certain types. For example, a normal cannot sensibly be applied to an entire view, as encapsulated in a view hints object. An application should disregard such attribute specifications.
Attributes may be assigned to other objects only indirectly, through the use of attribute sets. Attributes are included in an attribute set by placing the attribute objects and the attribute set object together in a container. The attributes in that set may be assigned to a geometric object by placing the relevant container and the geometric object together in a further container.
An attribute set may also be placed in a cap attribute set of any type; in this way, attributes may be assigned separately and selectively to the caps and face of a cone or cylinder. Attribute sets may also be placed in face, geometry, and vertex attribute set lists; in this way, attributes may be assigned separately and selectively to the facets, segments, and vertices of geometric objects having those features. An attribute set may also be placed in a group. Unless overridden, the attributes in an attribute set placed in a hierarchically structured group are inherited by objects at lower levels in the hierarchy of that group. (An application should not permit an attribute to be inherited by an object to which that attribute cannot sensibly be applied.) See the sections on cap attribute sets, attribute set lists, and groups for complete details on the composition of these objects.
Parent Hierarchy
Shared, set.Parent Objects
Any geometric object, cap attribute set, attribute set list, or group. An attribute set always has a parent object.Child Objects
Attributes: ambient coefficient, diffuse color, specular color, specular control, transparency color, highlight state, shading UV, surface UV (all optional).Example
Container ( Polygon (...) # all attributes in set applied to polygon Container ( # container puts attributes in set AttributeSet ( ) AmbientCoefficient (...) DiffuseColor (...) SpecularColor (...) SpecularControl (...) Normal (...) ) )Top Cap Attribute Sets
Labels
- ASCII
TopCapAttributeSet
- Binary
tcas
(=0x74636173
)Data Format
No data.Data Size
0Description
A top cap attribute set is used to attach attributes to the top cap of a cylinder that has an optional top cap. The attributes to be assigned to the cap are placed in a regular attribute set in the usual manner. Then the container holding the regular attribute set and the attributes is placed in the cap attribute set by including that container and the cap attribute set in a further container.The attributes associated with a top cap attribute set are not drawn if the parent object lacks a top cap.
Parent Hierarchy
Data, cap data.Parent Objects
Cylinder (always).Child Objects
Attribute set (optional). An empty top cap attribute set has no effect.Example
Container ( Cylindner ( ... ) Caps ( Top ) Container ( TopCapAttributeSet ( ) Container ( AttributeSet ( ) DiffuseColor ( 0.2 0.9 0.4 ) ) ) )Bottom Cap Attribute Sets
Labels
- ASCII
BottomCapAttributeSet
- Binary
bcas
( =0x62636173
)Data Format
No data.Data Size
0Description
A bottom cap attribute set is used to attach attributes to the bottom cap of a cone or cylinder that has an optional bottom cap. The attributes to be assigned to the cap are placed in a regular attribute set in the usual manner. Then the container holding the regular attribute set and the attributes is placed in the cap attribute set by including that container and the cap attribute set in a further container.The attributes associated with a bottom cap attribute set are not drawn if the parent object lacks a bottom cap.
Parent Hierarchy
Data, cap data.Parent Objects
Cone, cylinder (always).Child Objects
Attribute set (optional). An empty bottom cap attribute set has no effect.Example
Container ( Cylinder ( ) Caps ( Bottom ) Container ( BottomCapAttributeSet ( ) Container ( AttributeSet ( ) DiffuseColor ( 0.2 0.9 0.4 ) ) ) )Face Cap Attribute Sets
Labels
- ASCII
FaceCapAttributeSet
- Binary
fcas (
=0x66636173
)Data Format
No data.Data Size
0Description
A face cap attribute set is used to attach an attribute set to the surface of a cone or cylinder but not to its caps. This object is used to apply attributes to a cone or cylinder in a way that does not cause them to be inherited by its caps.Parent Hierarchy
Data, cap data.Parent Objects
Cone, cylinder (always).Child Objects
Attribute set (optional). An empty face cap attribute set has no effect.Example
Container ( Cylinder ( ) Caps ( Top ) Container ( AttributeSet ( ) SurfaceShader (...) ) Container ( FaceCapAttributeSet ( ) Container ( AttributeSet ( ) DiffuseColor ( 1 0 0 ) ) ) )Attribute Set Lists
Geometry Attribute Set Lists
Labels
- ASCII
GeometryAttributeSetList
- Binary
gasl
( =0x6761736C
)Data Format
Uns32 nObjects PackingEnum packing Uns32 nIndices Uns indices[nIndices]Field descriptions
nObjects
- The total number of instances of the relevant feature of the parent geometric object possessed by that object. If the parent object is a polyline, the relevant feature is polyline segment, so the value of this field is the total number of segments of the polyline.
packing
- See the section "Face Attribute Set Lists" on page 1-137 for a complete explanation of this field.
nIndices
- The size of the following array. See the section "Face Attribute Set Lists" on page 1-137 for a complete explanation of this field.
indices[]
- An array of indices. A standard method of indexing instances of the relevant feature of the parent object is assumed to have been established, as with the segments of a polyline. The values of this field are the indices of such instances and are to be specified in increasing order. See the section "Face Attribute Set Lists" on page 1-137 for a complete explanation of this field.
Data Size
16 +nIndices
*sizeof(Uns)
+ paddingDescription
A geometry attribute set list is used to assign sets of attributes separately and selectively to distinct instances of a tractable feature of geometric objects. A standard method of indexing the instances of such a feature is presupposed by a geometry attribute set list.At present, the polyline is the only primitive geometric object to which a geometry attribute set list may be attached. The attribute sets appearing in a geometry attribute set list are assigned to the line segments of which the polyline is composed, not to the vertices of the polyline. (To attach attributes to the vertices, use a vertex attribute set list.)
The standard index of the segments of a polyline is described in the section "Polylines." To recapitulate, the segment having index i is the segment having as its endpoints
vertices[i]
andvertices[i+1]
.Parent Hierarchy
Data, attribute set list.Parent Objects
Polyline (always).Child Objects
Attribute sets (required). See the section "Face Attribute Set Lists" on page 1-137 for a complete explanation of how child objects are correlated with instances of the relevant features of the parent geometric object.Example
Container ( PolyLine (...) #parent geometric object Container ( GeometryAttributeSetList ( ) 6 exclude 4 # there are 6 segments; exclude 4 of them 0 2 3 5 # indices of the segments to be excluded #child objects Container ( AttributeSet ' #applied to segment 1 DiffuseColor (...) ) Container ( AttributeSet #applied to segment 4 DiffuseColor (...) ) ) )Face Attribute Set Lists
Labels
- ASCII
FaceAttributeSetList
- Binary
fasl
(=0x6661736C
)Packing enum data type
PackingEnum
- The permitted values are
include
( =0x00000000
) andexclude
( =0x00000001
).Data Format
Uns32 nObjects PackingEnum packing Uns32 nIndices Uns32 indices[nIndices]Field descriptions
nObjects
The total number of faces or facets of the parent object. If the parent object is a box, the value of this field is 6. If the parent object is a trigrid, the value of this field is the number of vertices used to define that trigrid, which is also the number of facets of the trigrid. If the parent object is a mesh, the value of this field is the number of faces of that mesh.packing
- The value of this field determines whether the facets of the parent object of the set list to receive attributes are those whose facet indices appear in the array
indices[]
or are those whose indices do not appear in that array. A value ofinclude
indicates the former;exclude
indicates the latter. You may wish to selectinclude
if most facets of the parent object are not to receive any attributes. Should any other value appear in this field, the entire set list and all of its child objects should be ignored.nIndices
- The number of facets of the parent object to which the action specified in the packing field is to be applied; that is, the number of facets to be included in (or excluded from) the group of facets to receive attributes. The value of this field may not exceed that of the
nObjects
field.indices[]
- An array of facet indices. The values in the fields of this array are the indices of those facets of the parent object to be subject to the action of the value of the packing field, in the event that the number of facets to receive attributes is less than the value in the
nObjects
field. The size of this array must equal the value in thenIndices
field. Indices are to be entered in fields of this array in increasing order; no index may appear more than once. If the value in thepacking
field isinclude
, then the field values represent those facets which are to receive attributes in consequence of the set list. If the value in thepacking
field isexclude
, then the field values represent those facets that are not to receive attributes in consequence of the set list. If the value in thepacking
field isexclude
and the value in thenIndices
field is 0, then this field may be left unspecified; similarly, if the value in thepacking
field isinclude
and the value in thenIndices
field is equal to the value in thenObjects
field, then this field may be left unspecified.Data Size
16 + nIndices * sizeof(Uns) + padding
Description
A face attribute set list is used to assign sets of attributes separately and selectively to one or more facets of a multi-faceted geometric object (that is, to the faces of a box or mesh, or to the triangular facets of a trigrid). A face attribute set list may not be assigned to a general polygon. The listed attribute sets themselves occur as child objects of the set list object and are correlated with facets of the parent object of the set list as described later in this section. You may think of the child objects as the items in the set list; officially, the set list is the object defined in this section.For convenience, the
packing
field allows you to choose whether to specify (by inclusion) the facets to receive attributes or to specify (by exclusion) the facets not to receive attributes. The number of child objects you must specify is equal to the number of facets actually to receive attributes, whichever option you select for thepacking
field. You may wish to specify by inclusion rather than by exclusion if most facets are not to receive any attributes. This option can reduce the size of theindices[]
array, save work, and save disk space.If the value of the
packing
field of a set list isinclude
, then the number of child objects of that set list must equal the value of thenIndices
field of that set list. If the value of thepacking
field isexclude
, then the number of child objects must equal the (absolute value of) the difference between the values of thenObjects
andnIndices
fields.Child objects are correlated with facets of the parent object of the set list as follows. Let the child objects of the set list be enumerated in the order of their occurrence in the metafile. If the value of the
packing
field isinclude
, then the ith child object is correlated with the facet whose index is the value of the ith field of the arrayindices[]
, orindices[i-1]
. If the value of thepacking
field isexclude
, then the ith child object is correlated with the facet whose facet index is the ith element of the sequence (in increasing order) of facets whose indices do not appear in the arrayindices[]
. For example, suppose that the parent object is a mesh having 17 faces,packing
is set toexclude
,nIndices
is 11, and the elements ofindices[]
are 1, 2, 4, 6, 7, 8, 11, 12, 13, 14, 16. Then six facets are to receive attributes: facets 0, 3, 5, 9, 10, 15, so the set list will have six child objects c0,..., c5. The third child object (that is, c2) is correlated with facet 5, and, in general, the ith element of the sequence <c0,..., c5> is correlated with the ith element of the sequence <0, 3, 5, 9, 10, 15>.The index used to enumerate the facets of a multifaceted geometric object is described in the section pertaining to that object. Indices begin with zero, so that the index of the i+1st facet of a multifaceted object is i. The index used to construct an attribute set list must be standard.
Parent Hierarchy
Data, attribute set list.Parent Objects
Box, mesh, trigrid.Child Objects
Attribute sets (required). The number of child objects is determined in the manner indicated in the description of a face attribute set list.Example
Container ( TriGrid (...) #parent object Container ( FaceAttributeSetList ( ) 6 #nObjects (parent has six facets; exclude #packing (exclude 4 #nIndices (four of them: 0 2 3 5 #indices[] (these four.) #begin list Container ( AttributeSet #apply to facet 1 DiffuseColor (...) ) Container ( AttributeSet #apply to facet 4 DiffuseColor (...) #end list ) ) )Vertex Attribute Set Lists
Labels
- ASCII
VertexAttributeSetList
- Binary
vasl (
=0x7661736C
)Data Format
Uns32 nObjects PackingEnum packing Uns32 nIndices Uns indices[nIndices]Field descriptions
nObjects
- The number of vertices of the parent geometric object.
packing
- See the section "Face Attribute Set Lists" on page 1-137 for a complete explanation of this field.
nIndices
- Size of the following array. See the section "Face Attribute Set Lists" on page 1-137 for a complete explanation of this field.
- indices[]
- An array of vertex indices. See the section "Face Attribute Set Lists" on page 1-137 for a complete explanation of this field.
Data Size
16 + nIndices * sizeof(Uns) + padding
Description
A vertex attribute set list is used to assign sets of attributes separately and selectively to the vertices of a verticed geometric object. Among the primitive metafile geometric objects, the following have vertices: general polygons, lines, meshes, polygons, polylines, triangles, and trigrids.The index used to enumerate the vertices of an object of one of these types is described in the section on objects of that type. To recapitulate, in all cases the vertices are enumerated in the order of their occurrence in the specification of the parent geometric object. In the case of a general polygon, the index does not distinguish between contours.
Parent Hierarchy
Data, attribute set list.Parent Objects
General polygon, line, mesh, polygon, polyline, triangle, trigrid. A vertex attribute set list always has a parent object.Child Objects
Attribute sets (required). See the section "Face Attribute Set Lists" on page 1-137 for a complete explanation of how child objects are correlated with aspects of the parent geometric object.Example
Container ( GeneralPolygon ( # parent geometric object 2 # nContours #contour 0 3 # nVertices, contour 0 -1 0 0 # vertex 0 1 0 0 # vertex 1 0 1.7 0 # vertex 2 #contour 1 3 # nVertices, contour 1 -1 0.4 0 # vertex 3 1 0.4 0 # vertex 4 0 2.1 0 # vertex 5 ) Container ( VertexAttributeSetList ( 6 Exclude 2 0 4 ) # set list Container ( # child objects AttributeSet ( ) # vertex 1 (contour 0) DiffuseColor ( 0 0 1 ) ) Container ( AttributeSet ( ) # vertex 2 (contour 0) DiffuseColor ( 0 1 1 ) ) Container ( AttributeSet ( ) # vertex 3 (contour 1) DiffuseColor ( 1 0 1 ) ) Container ( AttributeSet ( ) # vertex 5 (contour 1) DiffuseColor ( 1 1 0 ) ) ) Container ( AttributeSet ( ) DiffuseColor ( 1 1 1 ) ) )Styles
Backfacing Styles
Labels
- ASCII
BackfacingStyle
- Binary
bckf
( =0x62636B66
)Backfacing styles
Both 0x00000000 Culled 0x00000001 Flipped 0x00000002Constant descriptions
Both
- A renderer should draw shapes that face toward and away from the camera. If a shape has only frontfacing attributes, those attributes are used for both sides of the shape.
Culled
- A renderer should not draw shapes that face away from the camera (this is not the same as hidden surface removal).
Flipped
- A renderer should draw shapes that face toward and away from the camera. If a shape has only frontfacing attributes, those attributes are used for both sides of the shape, but the normals of backfacing shapes are inverted, so that they face toward the camera.
Data Format
BackfacingEnum backfacing
backfacing
- The value in this field must be one of the three constants defined above.
Description
A scene's backfacing style determines whether or not a renderer draws shapes that face away from a scene's camera. This style object defines some of the characteristics of a renderer and generally applies to all of the objects in a model.Parent Hierarchy
Shared, shape, style.Parent Objects
None.Child Objects
None.Example
BeginGroup ( OrderedDisplayGroup ( ) ) Matrix ( ... ) BackfacingStyle ( Both ) Mesh ( ... ) Mesh ( ... ) EndGroup ( )Interpolation Styles
Labels
- ASCII
InterpolationStyle
- Binary
intp
( =0x696E7470
)Interpolation Styles
None 0x00000000 Vertex 0x00000001 Pixel 0x00000002Constant descriptions
None
- No interpolation is to occur. The renderer is to apply each effect uniformly across a surface.
Vertex
- The renderer is to interpolate values linearly across a verticed surface, using the values at the vertices.
Pixel
- The renderer is to calculate a value of each effect for every pixel in the image.
Data Format
InterpolationStyleEnum interpolationStyleField descriptions
interpolationStyle
- The value in this field must be one of these constants:
None
,Vertex
, orPixel
.Data Size
4Description
A scene's interpolation style determines the method of interpolation a renderer uses when applying lighting or other shading effects to a surface. A value of None causes the surfaces of a model to have a faceted appearance; the other two values cause its surfaces to be rendered smoothly.Parent Hierarchy
Shared, shape, style.Parent Objects
None.Child Objects
None.Example
BeginGroup ( DisplayGroup ( ) ) InterpolationStyle ( Vertex ) Container ( Triangle ( ... ) VertexAttributeSetList ( ... ) . . . ) EndGroup ( )Fill Styles
Labels
- ASCII
FillStyle
- Binary
fist (
=0x66697374
)Fill StyleS
Filled 0x00000000 Edges 0x00000001 Points 0x00000002 Empty 0x00000003Constant descriptions
Filled
- The renderer should draw shapes as solid filled objects.
Edges
- The renderer should draw shapes as the sets of lines that define the edges of surfaces.
Points
- The renderer should draw shapes as the sets of points that define the vertices of surfaces.
Empty
- [To be supplied.]
Data Format
FillStyleEnum fillStyleField descriptions
fillStyle
- The value of this field must be one of these constants:
Filled
,Edges
,Points
,Empty
.Data Size
4Description
A scene's fill style determines whether an object is drawn as a solid filled object or is decomposed into a set of edges or points.Parent Hierarchy
Shared, shape, style.Parent Objects
None.Child Objects
None.Example
BeginGroup ( DisplayGroup ( ) ) FillStyle ( Edges ) Container ( Mesh ( ... ) VertexAttributeSetList ( ... ) ) Torus ( ... ) EndGroup( )Highlight Styles
Labels
- ASCII
HighlightStyle
- Binary
high
(=0x68696768
)Data Format
No data.Data Size
0Description
A highlight style object is used to specify attributes to be applied to selected geometric objects during rendering. Any renderer that supports highlighting will use the attributes specified by a highlight style object to override incompatible attributes assigned to affected geometric objects in other ways. The attributes specified by a highlight style object are applied to a geometric object only if that geometric object also has a highlight state attribute that is set toTrue
. See the section "Highlight State" on page -9 for complete details on highlight state attributes.Parent Hierarchy
Shared, shape, style.Parent Objects
None.Child Objects
Attribute set (required).Example
BeginGroup ( DisplayGroup ( ) ) Container ( HighlightStyle ( ) # highlight style object Container ( AttributeSet ( ) DiffuseColor ( 0 0 1 ) # highlight attribute ) Container ( Polygon ( ... ) Container ( AttributeSet ( ) DiffuseColor ( 1 0 0 ) HighlightState ( True ) # polygon will be highlighted ) ) Container ( Box Container ( AttributeSet ( ) DiffuseColor ( 0 1 0 ) HighlightState ( False ) # box will not be highlighted ) ) Container ( Line ( ... ) # line will not be highlighted Container ( AttributeSet ( ) DiffuseColor ( 1 1 1 ) ) ) ) EndGroup ( )Subdivision Styles
Labels
- ASCII
SubdivisionStyle
- Binary
sbdv (
=0x7364636C
)Subdivision Method Enum Data Type
Constant
0x00000000
WorldSpace
0x00000001
ScreenSpace
0x00000002
- Note
- There are two data formats. ·
First Data Format
SubdivisionMethodEnum subdivisionMethod Float32 value1subdivisionMethod
The value in this field must be one of the specifiersWorldSpace
orScreenSpace
. A value ofWorldSpace
indicates that the renderer subdivides a curve (or surface) into polylines (or polygons) whose sides have a world-space length that is at most as large as the value specified in thevalue1
field. A value ofScreenSpace
indicates that the renderer subdivides a curve (or surface) into polylines (or polygons) whose sides have a length that is at most as large as the number of pixels specified in thevalue1
field.
value1
- For world-space subdivision, the maximum length of a polyline segment (or polygon side) into which a curve (or surface) is subdivided. For screen-space subdivision, the maximum number of pixels in a polyline segment (or polygon side) into which a curve (or surface) is subdivided. The value in this field should be greater than 0.
Data Size
8Second Data Format
SubdivisionMethodEnum subdivisionMethod Uns32 value1 Uns32 value2subdivisionMethod
The value in this field must be the specifierConstant
. This value indicates that the renderer subdivides a curve into a number of polyline segments and a surface into a mesh of polygons.
value1
- The number of polylines into which a curve should be subdivided, or the number of vertices in the u parametric direction of the polygonal mesh into which a surface is divided. The value in this field should be greater than 0.
value2
- The number of vertices in the v parametric direction of the polygonal mesh into which a surface is divided. The value in this field should be greater than 0.
Data Size
12Description
A scene's subdivision style determines how a renderer decomposes smooth curves and surfaces into polylines and polygonal meshes for display purposes. Different specifiers and numerical values determine different degrees of fineness of approximation.Parent Hierarchy
Shared, shape, style.Parent Objects
None.Child Objects
None.Example
BeginGroup ( DisplayGroup ( ) SubdivisionStyle ( Constant 32 32 ) Ellipsoid ( ... ) ) Container ( SubdivisionStyle ( WorldSpace 12 ) Box ( ... ) ) EndGroup ( )Orientation Styles
Labels
- ASCII
OrientationStyle
- Binary
ornt
(=0x6F726E74
)ORIENTATION STYLES
Constant descriptionsCounterClockwise
0x00000000 Clockwise 0x00000001
CounterClockwise
The front face of a polygonal shape is defined using the righthand rule.Clockwise
- The front face of a polygonal shape is defined using the lefthand rule.
Data Format
OrientationEnum orientationField descriptions
orientation
- The value in this field must be one of these constants:
CounterClockwise
,Clockwise
.Data Size
4Description
A scene's orientation style determines which side of a planar surface is considered (by the renderer) to be the "front" side. This style may be changed in order to change the orientation of a polygonal shape.Parent Hierarchy
Shared, shape, style.Parent Objects
None.Child Objects
None.Example
BeginGroup( DisplayGroup ( ) ) OrientationStyle ( Clockwise ) . . . EndGroup ( )Receive Shadows Styles
Labels
- ASCII
ReceiveShadowsStyle
- Binary
rcsh
(=0x72637368
)Data Format
Boolean receiveShadowsField descriptions
receiveShadows
- A value of
True
indicates that objects are to receive shadows; a value ofFalse
indicates that objects are not to receive shadows.Data Size
4Description
A scene's receive shadows style specifies whether or not obscured objects shall receive shadows in rendering.
- Note
- Some lights also specify whether or not the objects they illuminate shall cast shadows. However, objects in the scope of a receive shadows style set to
False
do not receive shadows, whether or not they are also appropriately situated to receive shadows from a light set to cast shadows. ·Parent Hierarchy
Shared, shape, style.Parent Objects
None.Child Objects
None.Example
BeginGroup ( DisplayGroup ( ) ) PointLight ( ... ) ReceiveShadows ( True ) Mesh ( ... ) Mesh ( ... ) Mesh ( ... ) EndGroup ( )Pick ID Styles
Labels
- ASCII
PickIDStyle
- Binary
pkid (
=0x706B6964
)Data Format
Uns32 idField descriptions
id
- An integer, supplied by your application.
Data Size
4Description
A pick ID style object is used to correlate the class of objects within its scope with an integer. This integer may be included in the specification of a picking operation to restrict that operation to the objects in that class. A pick ID style object must be placed in a group or container to have effect; the scope of a pick ID style object placed in a group (or container) is the class of objects located between that style object and the end of that group (or container).Parent Hierarchy
Shared, shape, style.Parent Objects
None.Child Objects
None.Example
PickIDStyle ( 8 )Pick Parts Styles
Labels
- ASCII
PickPartsStyle
- Binary
pkpt (
=0x706B7074
)pick parts STYLES
Constant descriptions
Object
0x00000000
Face
0x00000001
Edge
0x00000002
Vertex
0x00000003
Object
- The hit list for picking contains only whole objects.
Face
- The hit list for picking contains faces of objects.
Edge
- The hit list for picking contains edges of objects.
Vertex
- The hit list for picking contains vertices of objects.
Data Format
PickPartsFlags pickPartsField descriptions
pickParts
- The value in this field must be one of the four flags specified in the
PickPartsFlags
data enumeration.Data Size
4Description
A pick parts style object is used to specify the sort of object to be picked during the operation of picking. The flagsFace
,Edge
, andVertex
are used to pick meshes; the flagObject
is used to pick all other objects. The default flag isObject
.Parent Hierarchy
Shared, shape, style.Parent Objects
None.Child Objects
None.Example
PickPartsStyle ( Object )Transforms
Translate Transforms
Labels
- ASCII
Translate
- Binary
trns
(=0x74726E73
)Data Format
Vector3D translateField descriptions
translate
- A translation in three dimensions, specified by a vector.
Data Size
12Description
A translate transform moves an object along the x, y, and z axes by the values specified by its translation vector. Thus, the transformTranslate ( i j k )
moves each point P = <Px, Py, Pz> in its scope to the point P' = <Px+i, Py+j, Pz+k>.Parent Hierarchy
Shared, shape, transform.Parent Objects
None.Child Objects
None.Example
Translate ( -1 1 0 )Scale Transforms
Labels
- ASCII
Scale
- Binary
scal
( =0x7363616C
)Data Format
Vector3D scaleField descriptions
scale
- A scaling vector.
Data Size
12Description
A scale transform scales an object along the x, y, and z axes by the values specified by its scaling vector.Parent Hierarchy
Shared, shape, transform.Parent Objects
None.Child Objects
None.Example
Scale ( 2 2 2 )Matrix Transforms
Labels
- ASCII
Matrix
- Binary
mtrx
( =0x6D747278
)Data Format
Matrix4x4 matrixField descriptions
matrix
- A 4-by-4 array specifying a custom matrix transformation. The specified matrix should be invertible.
Data Size
64Description
A matrix transform is a transform by an arbitrary invertible 4-by-4 matrix.Parent Hierarchy
Shared, shape, transform.Parent Objects
None.Child Objects
None.Example
Matrix ( 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 )Rotate Transforms
Labels
- ASCII
Rotate
- Binary
rott
(=0x726F7474
)Axis Enum Data Type
X
0x00000000
Y
- 0x00000001
Z
- 0x00000002
Data Format
AxisEnum axis Float32 radiansField descriptions
axis
- The axis of rotation. The value in this field must be one of these constants:
X
,Y
, orZ
.radians
- The number of radians to rotate around the axis of rotation.
Data Size
8Description
A rotate transform rotates an object about the x, y, or z axis by a specified number of radians.Parent Hierarchy
Shared, shape, transform.Parent Objects
None.Child Objects
None.Example
Rotate ( # rotate about the z axis by -1.57 radians Z -1.57 )Rotate-About-Point Transforms
Labels
- ASCII
RotateAboutPoint
- Binary
rtap
( =0x72746170
)Data Format
AxisEnum axis Float32 radians Point3D originField descriptions
axis
- The axis of rotation.
radians
- The number of radians to rotate about the axis of rotation.
origin
- The point at which the rotation is to occur.
Data Size
20Description
A rotate-about-point transform rotates an affected object by the specified number of radians about the line parallel to the value in theaxis
field and passing through the point specified in theorigin
field.Parent Hierarchy
Shared, shape, transform.Parent Objects
None.Child Objects
None.Example
Rotate ( Y # axis 1.0 # radians 2 3 4 # origin )Rotate-About-Axis Transforms
Labels
- ASCII
RotateAboutAxis
- Binary
rtaa
( =0x72746161
)Data Format
Point3D origin Vector3D orientation Float32 radiansField descriptions
origin
- The origin of the axis of rotation.
orientation
- The orientation of the axis of rotation. This vector should be normalized.
radians
- The number of radians by which an affected object is rotated.
Data Size
28Description
A rotate-about-axis transform rotates an object about an arbitrary axis in space by a specified number of radians. The value in theorigin
field and the orientation vector are used to define the axis of rotation.Parent Hierarchy
Shared, shape, transform.Parent Objects
None.Child Objects
None.Example
RotateAboutAxis ( 20 0 0 # origin .33 .33 .34 # orientation 1.57 # radians )Quaternion Transforms
Labels
- ASCII
Quaternion
- Binary
qtrn
( =0x7174726E
)Data Format
Float32 w Float32 x Float32 y Float32 zField descriptions
w
- The w component of the quaternion transform.
x
- The x component of the quaternion transform.
y
- The y component of the quaternion transform.
z
- The z component of the quaternion transform.
Data Size
16Description
A quaternion transform rotates and twists an object in a manner determined by the mathematical properties of quaternions.Parent Hierarchy
Shared, shape, transform.Parent Objects
None.Child Objects
None.Example
Quaternion ( 0.2 0.7 0.2 1.57 )Shader Transforms
Labels
- ASCII
ShaderTransform
- Binary
sdxf
( =0x73647866
)Data Format
Matrix4x4 shaderTransformField descriptions
shaderTransform
- A 4-by-4 matrix.
Data Size
64Description
A shader transform transforms a shaded object into a distinct world-space coordinate system. A shader transform does not affect the current transformation hierarchy and does not affect the manner in which the object to which it is applied is drawn.Parent Hierarchy
Data.Parent Objects
Any shader. A shader transform always has a parent object.Child Objects
None.Example
Container ( CustomShader ( ) ShaderTransform ( 1 0 0 0 0 1 0 0 0 0 1 0 2 3 4 1 ) )Shader UV Transforms
Labels
- ASCII
ShaderUVTransform
- Binary
sduv
( =0x73647576
)Data Format
Matrix3x3 matrixField descriptions
matrix
- A 3-by-3 matrix.
Data Size
36Description
A shader uv transform may be used to transform the surface uv parameterization of a geometric object prior to shading. A shader uv transform may be used to rotate a texture map.Parent Hierarchy
Data.Parent Objects
Any shader. A shader uv transform always has a parent object.Child Objects
None.Example
Container ( TextureShader ( ) ShaderUVTransform ( 1 0 0 0 1 0 0.2 0.3 1 ) PixmapTexture ( ... ) )Lights
Attenuation and Fall-Off Values
Some lights suffer attenuation; that is, a loss of intensity over distance. The application determines the degree of attenuation of a light by specifying substituends for three distinct variables in a complex term that occurs in whatever formula it uses to compute the intensity of that light at a given distance from its source. The choice of constants determines whether the light suffers attenuation and, if so, the degree to which its intensity diminishes as a function of distance. These constants are specified in a data structure of the following type.Attenuation DataType
Float32 c0 Float32 c1 Float32 c2Description
The attenuation factor determined by an attenuation data type is expressed by the result of replacing the variables c0, c1, c2 by the values of the fieldsc0
,c1
,c2
in the complex term(Here l is the location of the light source, p is the illuminated point, and dl, p is the distance from l to p.)
The initial intensity of a light is multiplied by its attenuation factor when the intensity of the light at a point is computed. Thus, if c0 = 1 and c1 = c2 = 0, then the light does not suffer attenuation over distance. If c1 = 1 and c0 = c2 = 0, then the intensity of the light at a point p diminishes in proportion to the distance between p and the light source, provided that that distance is at least one unit. If c2 = 1 and c0 = c1 = 0, then the intensity of the light at p diminishes in proportion to the square of the distance between p and the light source, again provided that that distance is at least one unit. If c0 = c2 = 1 and c1 = 0, then the intensity of the light at p diminishes in proportion to the sum of 1 and the square of the distance between p and the light source.
The attenuation factor is not clamped to a maximum value. Thus, for some choices of c0, c1, c2, the intensity of a light may exceed its source intensity at distances of less than one unit, driving the RGB color values of the light toward the maximum of (1, 1, 1), or pure white.
The amount of illumination that a point illuminated by a light receives from that light also depends on several other factors. Among these factors are the diffuse and specular reflection characteristics of the surface that contains that point and the relative positions of the light source, the illuminated point, and the viewer (the camera).
Light Fall-Off Values
A spot light specifies a cone of light emanating from a source location. Within the inner cone defined by the hot angle of a spot light, the light may suffer attenuation over distance from the light source. Within the outer section of the cone between the hot angle and the outer angle of a spot light, the light may suffer further attenuation.Spot lights have a fall-off value that determines the manner of attenuation of the light from the edge of the cone defined by the hot angle to the edge of the cone defined by the outer angle. The direction of fall off is perpendicular to the ray from the source location through the center of the cone. The amount of additional attenuation determined by any fall-off value is the same along all rays from the location of the light source forming the same angle with the axis of the cone.
The following constants specify four fall-off values a spot light may have.
FallOff VALUES
None 0x00000000 Linear 0x00000001 Exponential 0x00000002 Cosine 0x00000003Constant descriptions
None
- The intensity of the light is not affected by the distance from the center of the cone to the edge of the cone.
Linear
- The intensity of the light at the edge of the cone falls off at a constant rate from the intensity of the light at the center of the cone.
Exponential
- The intensity of the light at the edge of the cone falls off exponentially from the intensity of the light at the center of the cone.
- Cosine
- The intensity of the light at the edge of the cone falls off as the cosine of the outer angle from the intensity of the light at the center of the cone.
Light Data
Labels
- ASCII
LightData
- Binary
lght
( =0x6C676874
)Data Format
Boolean isOn Float32 intensity ColorRGB colorField descriptions
isOn
- A value of
True
indicates that the parent light is active (is on). A value ofFalse
indicates that the parent light is inactive (is off).intensity
- The intensity of the parent light at its source. The value in this field must be in the closed interval [0, 1]. 0 is the minimum value; 1 is the maximum value.
color
- The RGB color of the parent light.
Data Size
20Description
A light data object specifies the color and source intensity of a parent light, and whether that light is currently active or inactive. A light object that does not have a light data object as a child object should be given the default values indicated below.
- Note
- A value of less than 1.0 in the intensity field of a light data object affects the color of the parent light. ·
Parent Hierarchy
Data.Parent Objects
A light data object always has a parent object; the parent object is always a light object.Child Objects
None.Example
Container ( AmbientLight ( ) LightData ( True # is on 0.75 # intensity 0.7 0.3 0.4 # color ) )Default Setting
True # isOn 1.0 # intensity (full) 1 1 1 # color (white)Ambient Light
Labels
- ASCII
AmbientLight
- Binary
ambn
( =0x616D626E
)Data Format
No data.Data Size
0Description
Ambient light is a base amount of light that is added to the illumination of all surfaces in a scene. Ambient light has no apparent source or location; its intensity is constant, and it does not cast shadows.Parent Hierarchy
Shared, shape, light.Parent Objects
None.Child Objects
Light data (optional). If no child object is specified, the light should have the properties specified in the default setting of a light data object.Example
Container ( ViewHints ( ) . . . BeginGroup ( DisplayGroup ( ) ) Container ( AmbientLight ( ) LightData ( ... ) ) Container ( DirectionalLight( ) LightData ( ... ) ) EndGroup ( ) )Directional Lights
Labels
- ASCII
DirectionalLight
- Binary
drct
( = 0x64726374 )Data Format
Vector3D direction Boolean castsShadowsField descriptions
direction
- The direction of the directional light. This vector should be normalized.
castsShadows
- A value of
True
indicates that the light casts shadows; a value ofFalse
indicates that the light does not cast shadows.Data Size
16Description
A directional light is a light that emits parallel rays in a specific direction. A directional light may be set to cast shadows.
- Note
- Some style objects also specify whether or not objects in a scene shall receive shadows. However, objects in the scope of a receive shadows style set to
False
do not receive shadows, whether or not they are also appropriately situated to receive shadows from a light set to cast shadows. ·Parent Hierarchy
Shared, shape, light.Parent Objects
None.Child Objects
Light data (optional). If no child object is specified, the light should have the properties specified in the default setting of a light data object.Example
Container ( DirectionalLight ( 1 0 0 True ) LightData ( ... ) )Point Lights
Labels
- ASCII
PointLight
- Binary
pntl
( =0x706E746C
)Data Format
Point3D location Attenuation attenuation Boolean castsShadowsField descriptions
location
- The location of the source of the point light.
attenuation
- This structure determines the amount that the intensity of the light diminishes over distance. See the section "Attenuation and Fall-Off Values" on page -53 for a description of this structure.
castsShadows
- A value of
True
specifies that objects illuminated by the light are to cast shadows; a value ofFalse
specifies that objects illuminated by the light are not to cast shadows.Data Size
20Description
A point light is a light that emits rays in all directions from a specific point source. A point light may suffer attenuation over distance, and may cast shadows.
- Note
- Some style objects also specify whether or not objects in a scene shall receive shadows. However, objects in the scope of a receive shadows style set to
False
do not receive shadows, whether or not they are also appropriately situated to receive shadows from a light set to cast shadows. ·Parent Hierarchy
Shared, shape, light.Parent Objects
None.Child Objects
Light data (optional). If no child object is specified, the light should have the properties specified in the default setting of a light data object.Example
BeginGroup ( DisplayGroup ( ) ) Triangle ( ... ) Box ( ... ) Container ( PointLight ( -10, 1, -1 # location 1 0 1 # attenuation True # casts shadows ) LightData ( ... ) ) EndGroup ( )Spot Lights
Labels
- ASCII
SpotLight
- Binary
spot
( =0x73706F74
)Data Format
Point3D location Vector3D orientation Boolean castsShadows Attenuation attenuation Float32 hotAngle Float32 outerAngle FallOffEnum fallOffField descriptions
location
- The location of the source of the spot light.
orientation
- The orientation of the cone of light emitted by the spot light. The direction of this vector is toward the light source. This vector should be normalized.
castsShadows
- A value of
True
specifies that objects illuminated by the light are to cast shadows; a value ofFalse
indicates that objects illuminated by the light are not to cast shadows.attenuation
- This structure determines the amount that the intensity of the light diminishes over distance. See the section "Attenuation and Fall-Off Values" on page -53 for a description of this structure.
hotAngle
- The half-angle (specified in radians) from the center of the cone of light within which the light remains at constant full intensity. The value in this field should be in the half-open interval [0, p/2).
outerAngle
- The half-angle (specified in radians) from the center to the edge of the cone of the spot light. The value in this field should be in the half-open interval [0, p/2), and should not be less than the value in the
hotAngle
field.fallOff
- The fall-off value for the spot light. The value in this field determines the manner of attenuation of the light from the edge of the hot angle to the edge of the outer angle. See the section "Attenuation and Fall-Off Values" on page -53 for a description of the constants that can be used in this field.
Data Size
44Description
A spot light is a light source that emits a circular cone of light in a specific direction from a specific location. Every spot light has a hot angle and an outer angle that together define the shape of the cone of light and the amount of attenuation that occurs from the center of the cone to the edge of the cone. The attenuation of the light's intensity from the edge of the hot angle to the edge of the outer angle is determined by the light's fall-off value.
- Note
- Some style objects also specify whether or not objects in a scene shall receive shadows. Thus, conflicting shadowing instructions can be sent to a renderer. The outcome in such a case is renderer specific, application specific, or both. ·
Parent Hierarchy
Shared, shape, light.Parent Objects
None.Child Objects
Light data. If no child object is specified, the light should have the properties specified in the default setting of a light data object.Example
Container ( SpotLight ( 0 9 0 # location 0 1 0 # orientation True # castsShadows 0 0 1 # attenuation 0.3 # hotAngle 0.5 # outerAngle Linear # fallOff ) LightData ( ... ) )Cameras
Camera Placement
Labels
- ASCII
CameraPlacement
- Binary
cmpl
( =0x636D706C
)Data Format
Point3D location Point3D pointOfInterest Vector3D upVectorField descriptions
location
- The location (in world-space coordinates) of the eye point of the parent camera.
pointOfInterest
- The point at which the parent camera is aimed, in world-space coordinates.
upVector
- The up vector of the parent camera. This vector should be perpendicular to the viewing direction defined by the values in the
location
andpointOfInterest
fields. This vector should be normalized.Data Size
36Description
A camera placement object defines the location, point of interest, and orientation of its parent camera, in world-space coordinates. The camera vector (also called the view vector) is defined to be the vectorpointOfInterest
-location
. This vector is normal to the projection plane and to the clipping planes, and the distances from the camera to those planes are measured along this vector.A camera placement object determines the coordinate system of the projection plane as follows. The origin of the projection plane is the point at the intersection of the projection plane and the line through the location and point of interest. The y axis of the projection plane coincides with the projection onto the projection plane of the up vector, and the x axis of the projection plane is the axis such that it, the y axis of the projection plane, and the inverse of the camera vector form a righthanded coordinate system.
If no camera placement object is specified for a camera, that camera should receive the default camera placement values specified below.
Parent Hierarchy
Data.Parent Objects
View angle aspect camera, view plane camera, orthographic camera. A camera placement object always has a camera as a parent object.Child Objects
None.Example
Container ( ViewAngleAspectCamera ( ... ) CameraPlacement ( 0 0 30 # location on z axis 0 0 0 # point of interest is the origin 0 1 0 # up vector aligned with yaxis ) )Default Values
0 0 1 # location 0 0 0 # pointOfInterest 0 1 0 # upVectorCamera Range
Labels
- ASCII
CameraRange
- Binary
cmrg
( =0x636D7267
)Data Format
Float32 hither Float32 yonField descriptions
hither
- The distance from the location of the parent camera to the near clipping plane. The value in this field should be greater than 0.
yon
- The distance from the location of the parent camera to the far clipping plane. The value in this field should be greater than the value in the
hither
field.Data Size
8Description
A camera range object is used to set the near and far clipping planes of its parent camera. Distances are measured in the direction defined by the camera vector, which is normal to both clipping planes.Parent Hierarchy
Data.Parent Objects
View angle aspect camera, view plane camera, orthographic camera. A camera placement object always has a parent object.Child Objects
None.Example
Container ( ViewPlaneCamera ( ... ) CameraPlacement ( ... ) CameraRange ( .01 # hither 75 # yon ) )Camera Viewport
Labels
- ASCII
CameraViewPort
- Binary
cmvp
( =0x636D7670
)Data Format
Point2D origin Float32 width Float32 heightField descriptions
origin
- The origin of the view port of the parent camera. The abscissa and ordinate of this point should lie in the closed interval [-1, 1]. The value in this field is the upper-left corner of the view port.
width
- The width of the view port of the parent camera. The value in this field should lie in the half-open interval (0, 2], and should not be greater than the absolute value of the difference between 1 and the abscissa of the origin.
height
- The height of the view port of the parent camera. The value in this field should lie in the half-open interval (0, 2], and should not be greater than the difference between -1 and the ordinate of the origin.
Data Size
16Description
Every camera specifies the dimensions of the largest (rectangular) image that that camera can produce (called the parent image), either explicitly or implicitly. The parent image may be specified by giving the coordinates of its vertices, by giving the height to width ratio of its sides, or in some other fashion. The camera view port object specifies the subregion of the parent image that is actually to be drawn. The value in theorigin
field defines the upper left corner of the view port; the values in the other two fields determine the lengths of the sides of the view port.The default setting specified below sets the view port equal to the parent image. Other settings may be used to clip the parent image to desired specifications.
Camera view port specifications are made in a coordinate system in which the height-to-width ratio of the parent image is one to one, and the coordinates of the upper-left and lower-right corners of that image are (-1, 1) and (1, -1), respectively. The actual height-to-width ratio of the parent image may not be one to one. If not, then view port specifications should be made under the assumption that the view port will be rescaled by the inverse of the height-to-width ratio of the parent image after the view port specifications have been made. Thus, if the height-to-width ratio of the parent image is i/j, and the height-to-width ratio of the image actually to be drawn is i'/j', then the height-to-width ratio of the rectangle specified in the view port should be i'j/ij'. Any view port having a different height-to-width ratio will result in a distorted image.
Parent Hierarchy
Data.Parent Objects
View angle aspect camera, view plane camera, orthographic camera. A camera viewport object always has a parent object.Child Objects
None.Example
CameraViewPort ( -0.5 0.5 1.0 1.0 )Default Values
-1 1 # origin at upper left corner of the parent image 2 # width is the entire width of the parent image 2 # height is the entire height of the parent imageOrthographic Cameras
Labels
- ASCII
OrthographicCamera
- Binary
orth
( =0x6F727468
)Data Format
Float32 left Float32 top Float32 right Float32 bottomField descriptions
left
- The x coordinate (in the camera's coordinate system) of the upper left corner of the front face of the view volume. Or, the distance from the center of the camera lens (that is, the view rectangle) to the left side of the lens.
top
- The y coordinate (in the camera's coordinate system) of the upper left corner of the front face of the view volume. Or, the distance from the center of the camera lens (that is, the view rectangle) to the top side of the lens.
right
- The x coordinate (in the camera's coordinate system) of the lower right corner of the front face of the view volume. Or, the distance from the center of the camera lens (that is, the view rectangle) to the right side of the lens.
bottom
- The y coordinate (in the camera's coordinate system) of the lower right corner of the front face of the view volume. Or, the distance from the center of the camera lens (that is, the view rectangle) to the left side of the lens.
Data Size
16Description
An orthographic camera is a parallel projection camera that employs an orthographic projection to obtain its image. The direction of projection is the opposite of the camera vector (that is,location - pointOfInterest
), the projection plane is the near clipping plane, and the projection is thus along a normal to the projection plane. The origin of the projection plane is the point athither
(camera vector); if the absolute values of the fieldstop
andbottom
are equal, and the absolute values of the fieldsleft
andright
are equal, then the origin of the projection plane is at the center of the front face of the view volume.Parent Hierarchy
Shared, shape, camera.Parent Objects
View hints (sometimes).Child Objects
Camera placement, camera range, camera view port (optional). If a camera does not have one of these child objects, then it should be assigned the default values specified in the section on that child object.Example
OrthographicCamera ( -10 -10 10 10 )View Plane Cameras
Labels
- ASCII
ViewPlaneCamera
- Binary
vwpl
( =0x7677706C
)Data Format
Float32 viewPlane Float32 halfWidthAtViewPlane Float32 halfHeightatViewPlane Float32 centerXOnViewPlane Float32 centerYOnViewPlaneField descriptions
viewPlane
- The distance from the camera location to the view plane.
halfWidthAtViewPlane
One half the width of the view plane window.halfHeightAtViewPlane
The value in thehalfWidthAtViewPlane
field divided by the horizontal-to-vertical aspect ratio of the view port. The value in this field determines the half-height of the view plane window.centerXOnViewPlane
The x coordinate of the center of the view plane window, specified in the view plane coordinate system.centerYOnViewPlane
The y coordinate of the center of the view plane window, specified in the view plane coordinate system.Data Size
20Description
A view plane camera is a type of perspective camera defined in terms of an arbitrary view plane. The camera vector is normal to the view plane, and the distance from the camera location to the view plane is measured in the direction defined by the camera vector. The window on the view plane and its center are defined in the projection plane coordinate system determined by the camera's camera placement object. The view volume of a view plane camera is determined by the four rays through the camera location and through the four corners of the rectangular window on the view plane, together with the two clipping planes. The view volume is the frustum whose top is the rectangle having as its vertices the intersections of these four rays with the near clipping plane and whose base is the rectangle having as its vertices the intersections of these rays with the far clipping plane.The center of projection of a view plane camera is the camera location point. If the center of the window defined by a view plane camera is not at the origin of the view plane, then the camera yields an off-axis view. The projection determined by a view plane camera may have one, two, or three principal vanishing points.
A view plane camera may be used to obtain a close-up image of a single object by using the approximate center and dimensions of that object to specify the size and location of the window on the view plane.
Parent Hierarchy
Shared, shape, camera.Parent Objects
View hints (sometimes).Child Objects
Camera placement, camera view port, camera range (optional). If a camera does not have one of these child objects, then it should be assigned the default values specified in the section on that child object.Example
Container ( ViewPlaneCamera ( 20 15.0 15.0 18 29 ) CameraPlacement ( ... ) CameraRange ( ... ) CameraViewPort ( ... ) )View Angle Aspect Cameras
Labels
- ASCII
ViewAngleAspectCamera
- Binary
vana
( =0x76616E61
)Data Format
Float32 fieldOfView Float32 aspectRatioXtoYField descriptions
fieldOfView
- An angle, specified in radians, that defines the maximum field of view of the camera. The value in this field should lie in the open interval (0, p).
aspectRatioXtoY
- The horizontal-to-vertical aspect ratio of the camera. If the value in this field is less than 1.0, the camera's field of view is vertical; otherwise, the camera's field of view is horizontal.
Data Size
8Description
A view angle aspect camera is a type of perspective camera defined in terms of a field of view angle and a horizontal-to-vertical aspect ratio. The aspect ratio determines the ratio of the base to the height of the rectangles that define the top and base of the camera's view volume. These rectangles lie in the near and far clipping planes, respectively, are upright in the camera's coordinate system, and are centered at the points of intersection of the line along the camera vector and the clipping planes.If the aspect ratio is less than 1.0, then the field of view angle is in the x = 0 plane of the camera's coordinate system. Otherwise, the field of view angle is in the y = 0 plane of the camera's coordinate system. In both cases the rays that define the angle intersect in the camera location point, and the field of view angle is bisected by the ray from the camera location defined by the camera vector. The center of projection is the camera location point. The view volume of a view angle aspect camera is symmetrical about its center line. The method of projection determined by a view angle aspect camera has one principal vanishing point, located at the origin of the projection plane.
Parent Hierarchy
Shared, shape, camera.Parent Objects
View hints (sometimes).Child Objects
Camera placement, camera view port, camera range (optional). If a camera does not have one of these child objects, then it should be assigned the default values specified in the section on that child object.Example
Container ( ViewAngleAspectCamera ( 1.7 1.0 ) CameraPlacement ( ... ) CameraRange ( ... ) CameraViewPort ( ... ) )Groups
Display Groups
Labels
- ASCII
DisplayGroup
- Binary
dspg
( =0x6C697374
)Data Format
No data.Data Size
0Description
A display group is a list of drawable objects and containers the root objects of which are drawable objects. Types of drawable objects include geometric objects, attribute sets, styles, transforms, and other display groups. A display group is delimited by begin group and end group objects.Parent Hierarchy
Shared, shape, group.Parent Objects
None.Child Objects
Display group state (optional). If no child object is specified, group state flags should be set to the default values specified in the section "Display Group States" on page -87.Example
BeginGroup ( Display Group( ) ) SubdivisionStyle ( Constant 32 32 ) Container ( Mesh ( ... ) VertexAttributeSetList ( ... ) FaceAttributeSetList ( ... ) ) Container ( Mesh ( ... ) VertexAttributeSetList ( ... ) FaceAttributeSetList ( ... ) ) . . . EndGroup ( )Ordered Display Groups
Labels
- ASCII
OrderedDisplayGroup
- Binary
ordg
( =0x6F72646C
)Data Format
No data.Data Size
0Description
An ordered display group is a display group in which the objects listed are sorted by type. The elements of an ordered display group are listed in the following order: transforms, styles, attribute sets, shaders, geometric objects, other groups. An ordered display group is delimited by begin group and End group objects.Parent Hierarchy
Shared, shape, group, display group.Parent Objects
None.Child Objects
Display group state (optional). If no child object is specified, group state flags should be set to the default values specified in the section "Display Group States" on page -87.Example
BeginGroup ( OrderedDisplayGroup ( ) ) RotateTransform ( ... ) ScaleTransform ( ... ) SubdivisionStyle ( ... ) BackfacingStyle ( ... ) BeginGroup ( DisplayGroup ( ) ) . . . EndGroup ( ) EndGroup ( )Light Groups
Labels
- ASCII
LightGroup
- Binary
lghg
( =0x676C6768
)Data Format
No data.Data Size
0Description
A light group is simply a list of light objects. A light group is delimited by begin group and end group objects.Parent Hierarchy
Shared, shape, group.Parent Objects
None.Child Objects
None.Example
BeginGroup ( LightGroup ( ) ) AmbientLight ( ) DirectionalLight ( ... ) SpotLight ( ... ) EndGroup ( )I/O Proxy Display Groups
Labels
- ASCII
IOProxyDisplayGroup
- Binary
iopx
( =0x70727879
)Data Format
No data.Data Size
0Description
An I/O proxy display group is used to place distinct specifications of the same model together in a group. The purpose of an I/O proxy display group is to permit a reading application that does not recognize all specifications of a model to pass over those that it does not recognize until it encounters one that it does recognize and can use to recover the model. For example, a pentagon may be represented by either a mesh or a polygon. If both representations are placed together in an I/O proxy display Group, then a reading application that recognizes meshes but does not recognize polygons can recover the pentagon from its mesh representation.Representations of a model in an I/O proxy display Group should appear in preferential order: any representation of a model is to be preferred to any other representation of that model occurring later in the group. While drawing, bounding, or picking, the reading application should use the first representation of the model that it recognizes and should ignore all other representations.
Parent Hierarchy
Shared, shape, group.Parent Objects
None.Child Objects
None.Example
BeginGroup ( IOProxyDisplayGroup ( ) ) Polygon ( ... ) # first preference GeneralPolygon ( ... ) # second preference Mesh # third preference EndGroup ( )Info Groups
Labels
- ASCII
InfoGroup
- Binary
info
( =0x696E666F
)Data Format
No data.Data Size
0Description
An info group is a list of string objects delimited by begin group and end group objects. An info group allows objects containing information in text form to be placed together in a group.Parent Hierarchy
Shared, shape, group.Parent Objects
None.Child Objects
None.Example
BeginGroup ( InfoGroup ( ) ) CString ( ... ) . . . CString ( ... ) EndGroup ( )Groups (Generic)
Labels
- ASCII
Group
- Binary
grup
( =0x67727570
)Data Format
No data.Data Size
0Description
A group (generic) is simply a list of drawable objects, delimited by begin group and end group objects.Parent Hierarchy
Shared, shape, group.Parent Objects
None.Child Objects
None.Example
BeginGroup ( Group ( ) ) . . . EndGroup ( )Begin Group Objects
Labels
- ASCII
BeginGroup
- Binary
bgng
( =0x62676E67
)Description
A begin group object is used to declare a group and to delimit the start of that group. Every group must begin with a begin group object.Parent Hierarchy
3DMF.Parent Objects
None.Child Objects
None.Example
BeginGroup( DisplayGroup ( ) # empty group ) EndGroup ( )End Group Objects
Labels
- ASCII
EndGroup
- Binary
endg
( =0x656E6467
)Data Format
No data.Data Size
0Description
An end group object is placed immediately after the last object in a group and is used to delimit that group.Parent Hierarchy
3DMF.Parent Objects
None.Child Objects
None.Example
BeginGroup ( DisplayGroup ( ) ) # empty group EndGroup ( )Display Group States
Labels
- ASCII
DisplayGroupState
- Binary
dgst
( =0x64677374
)Display Group State Flags
None 0x00000000 IsInline 0x00000001 DoNotDraw 0x00000002 NoBoundingBox 0x00000004 NoBoundingSphere 0x00000008 DoNotPick 0x00000010Constant descriptions
None
- No flags are specified.
IsInline
- The parent group is to be executed inline (that is, without pushing the graphics state on a stack before execution and popping it after execution). This flag is used to prevent the objects in the parent group from inheriting properties specified at a higher level in a hierarchical model containing the parent group. If this flag is set, then objects in the parent group receive only those properties specified in that group.
DoNotDraw
- The parent group is not to be drawn when rendering or picking. If this flag is set, then the parent group is not to be traversed when it is encountered in a hierarchical model.
NoBoundingBox
- The bounding box of the parent group is not to be used for rendering.
NoBoundingSphere
The bounding sphere of the parent group is not to be used for rendering.DoNotPick
- The parent group is not eligible for inclusion in the hit list of a pick object.
Data Format
DisplayGroupStateFlags traversalFlagsField descriptions
traversalFlags
- A bitfield expression specifying one or more display group state flags.
Data Size
4Description
A display group state object is used to specify a set of flags that determines how its parent display group is to be traversed during rendering or picking and whether a bounding box or bounding sphere is to be used during rendering. If a display group does not have a display group state object as a child object, that group's state flags should be set to the default state specified below.In a text file, a display group state object should be placed together with a group object in the begin group object that immediately precedes that group.
Parent Hierarchy
Data.Parent Objects
Display group, ordered display group. A display group state object always has a parent object.Child Objects
None.Default Display Group State Flags
None (= 0x00000000)Example
BeginGroup ( DisplayGroup ( ) DisplayGroupState ( DoNotPick ) ) . . . EndGroup ( )Renderers
Wireframe Renderers
Labels
- ASCII
WireFrame
- Binary
wrfr
( =0x77726672
)Data Format
No data.Data Size
0Description
A wireframe renderer creates line drawings of models. Such a renderer does not decompose polylines or polygons during rendering. It can render all backfacing, point, and edge drawing styles.Parent Hierarchy
Shared, renderer.Parent Objects
View hints (sometimes).Child Objects
None.Example
Container ( ViewHints ( ) Wireframe ( ) ViewPlaneCamera ( ... ) PointLight ( ... ) BeginGroup ( DisplayGroup ( ) ) . . . EndGroup ( ) )Interactive Renderers
Labels
- ASCII
InteractiveRenderer
- Binary
ctwn
( =0x6374776E
)Data Format
No data.Data Size
0Description
The interactive renderer uses a fast and accurate depth-sorting algorithm for drawing solid, shaded surfaces as well as vectors. The interactive renderer is also capable of rendering highly detailed, complex models with very realistic surface illumination and shading, but at the expense of time and memory.Parent Hierarchy
Shared, renderer.Parent Objects
View hints (sometimes).Child Objects
None.Example
Container ( ViewHints ( ) InteractiveRenderer ( ) ViewPlaneCamera ( ... ) PointLight ( ... ) BeginGroup ( DisplayGroup ( ) ) . . . EndGroup ( ) )Generic Renderers
Labels
- ASCII
GenericRenderer
- Binary
gnrr
( =0x676E7272
)Data Format
No data.Data Size
0Description
A generic renderer performs no rendering functions, but may be used to pick or to accumulate state.Parent Hierarchy
Shared, renderer.Parent Objects
View hints (sometimes).Child Objects
None.Example
Container ( ViewHints ( ) GenericRenderer ( ) ViewPlaneCamera ( ... ) PointLight ( ... ) BeginGroup ( DisplayGroup ( ) ) . . . EndGroup ( ) )Shaders
Shader Data Objects
Labels
- ASCII
Shader
- Binary
shdr
( =0x73686472
)Shader UV Boundary TYPES
Constant descriptions
Wrap
0x00000000
Clamp
0x00000001
Wrap
- Values outside the valid range of uv values are to be wrapped. To wrap a shader effect is to replicate the entire effect across the mapped area.
Clamp
- Values outside the valid range of uv values are to be clamped. To clamp a shader effect is to replicate the boundaries of the effect across the portion of the mapped area that lies outside the valid range.
Data Format
ShaderUVBoundaryEnum uBounds ShaderUVBoundaryEnum vBoundsField descriptions
uBounds
- The value in this field determines whether values in the u parametric direction that lie outside the valid range are wrapped or clamped by the parent shader.
vBounds
- The value in this field determines whether values in the v parametric direction that lie outside the valid range are wrapped or clamped by the parent shader.
Data Size
8Description
A shader data object is a boundary-handling method specifier that determines how a parent shader handles parametric uv values that are outside the valid range (namely, 0 to 1).Parent Hierarchy
Data.Parent Objects
Any shader. A shader data object always has a parent object.Child Objects
None.Example
Container ( CustomShader ( ... ) ShaderData ( Wrap Clamp ) )Default Values
Wrap WrapTexture Shaders
Labels
- ASCII
TextureShader
- Binary
txsu
( =0x74787375
)Data Format
No data.Data Size
0Description
A texture shader is used to apply a texture to a surface in shading.Parent Hierarchy
Shared, shape, shader, surface shader.Parent Objects
None.Child Objects
Pixmap texture object. A texture shader always has one child object.Example
Container ( TextureShader ( ) PixmapTexture ( ... ) )Pixmap Texture Objects
Labels
- ASCII
PixmapTexture
- Binary
txpm
(=0x7478706D
)Endian TypeS
BigEndian 0x00000000 LittleEndian 0x00000001Constant descriptions
BigEndian
- Packing is to be done in a big-endian manner.
LittleEndian
- Packing is to be done in a little-endian manner.
Pixel TypeS
RGB8 0x00000000 RGB16 0x00000001 RGB24 0x00000002 RGB32 0x00000003Constant descriptions
RGB8
- 8 bits are devoted to each pixel in the pixmap.
RGB16
- 16 bits are devoted to each pixel in the pixmap.
RGB24
- 24 bits are devoted to each pixel in the pixmap.
RGB32
- 32 bits are devoted to each pixel in the pixmap.
Data Format
Uns32 width Uns32 height Uns32 rowBytes Uns32 pixelSize PixelTypeEnum pixelType EndianEnum bitOrder EndianEnum byteOrder RawData image[rowBytes * height]Field descriptions
width
- The width of the pixmap. The value in this field must be greater than 0.
height
- The height of the pixmap. The value in this field must be greater than 0.
rowBytes
- The number of bytes in a row of the pixmap. The value in this field cannot be less than the product of the values in the
width
andpixelSize
fields.pixelSize
- The size of each pixel in the pixmap. The value in this field must be greater than 0 and less than 32.
pixelType
- The type of the pixels of the pixmap.
bitOrder
- The order in which the bits in a byte are addressed. This field must contain one of the constants
BigEndian
orLittleEndian
.byteOrder
- The order in which the bytes in a word are addressed. This field must contain one of the constants
BigEndian
orLittleEndian
.image[]
- The array that defines the pixmap.
Data Size
28 + rowBytes * height + padding
Description
A pixmap texture object is a generic method of transferring pixmap data that is used in conjunction with a texture shader.Parent Hierarchy
Shared, texture.Parent Objects
Texture shader. A pixmap texture object sometimes, but not always, has a parent object.Child Objects
None.Example
PixmapTexture ( 256 256 # width/height 128 # rowBytes 32 # pixelSize RGB24 BigEndian BigEndian 0x00123232... 0x... )View Objects
View Hints
Labels
- ASCII
ViewHints
- Binary
vwhn
( =0x7677686E
)Data Format
No data.Data Size
0Description
The view hints object is used to group together all of the objects needed to render an image from a model (that is, a renderer, a camera, lights, and any additional information to be supplied to the renderer). These other objects occur as child objects to the view hints object; a container may be used to group them together. The container holding a view hints object and its associated rendering specifications should be placed immediately before the models to be rendered according to those specifications.A metafile may contain more than one view hints object. If a metafile contains more than one view hints object, the specifications associated with each view hints object are inherited by all subsequent view hints objects, unless overridden by contrary specifications. Accordingly, a subsequent view hints object need have as child objects only those specifications that differ from those of its predecessors. For example, you may wish to render the same model using different cameras, while keeping the lights and other specifications intact. Once the initial specifications have been made, you need only specify a different camera together with a new view hints object. The model may be placed in the scope of a subsequent view hints object through the use of a reference object; the specification of the model need not be repeated.
Parent Hierarchy
Shared.Parent Objects
None.Child Objects
Renderer, camera, lights (as many as desired), attribute set, image dimensions, image mask, image clear color (all optional).Example
3DMetafile ( 1 0 Normal toc> ) Container ( ViewHints ( ) Container ( ViewAngleAspectCamera ( 0.73 1.0 ) CameraPlacement ( 0 0 30 0 0 0 0 1 0 ) ) DirectionalLight ( -0.7 -0.7 -0.65 ) Container ( AttributeSet ( ) DiffuseColor ( 0.2 0.2 0.2 ) SpecularControl ( 3 ) ) ImageDimensions ( 200 200 ) ) ref1: BeginGroup ( DisplayGroup ( ) ) . . . EndGroup ( ) Container ( ViewHints ( ) Container ( ViewAngleAspectCamera ( 0.73 1.0 ) CameraPlacement ( 0 10 0 0 0 0 0 1 0 ) ) ) Reference ( 1 )Image Masks
Labels
- ASCII
ImageMask
- Binary
immk
( =0x696D6D6B
)Data Format
Uns32 width Uns32 height Uns32 rowBytes RawData image[rowBytes * height]Field descriptions
width
- The width, in bits, of the bitmap whose bits are listed in the array
image[]
. The value in this field should be greater than 0.height
- The height, in bits, of the bitmap whose bits are listed in the array
image[]
. The value in this field should be greater than 0.rowBytes
- The number of bytes in a row of the bitmap.
image[]
- An array of bit specifications.
Data Size
12 + (rowBytes * height) + padding
Description
An image mask is a bitmap that is used to mask out certain portions of an image. The values in thewidth
andheight
fields of an image mask specify the boundaries of the rectangular subregion of an image that is actually to be drawn. (Width and height are measured from the upper-left corner of the image to which a mask is applied.) Each bit listed in the arrayimages[]
corresponds to 1 pixel in the rectangle defined by the width and height of the mask. If a bit is set, then the corresponding pixel is drawn with the color determined by the underlying image. If a bit is clear, then the corresponding pixel is drawn black. Normally, an image mask is applied to an image after that image has been rasterized.An image dimensions object may be used together with an image mask: the former may be used to clip an image, and the latter may be used to filter the clipped image.
Parent Hierarchy
Data, view hints data.Parent Objects
View hints. An image mask always has a parent object.Child Objects
None.Example
3DMetafile ( 1 0 Normal toc> ) Container ( ViewHints ( ) ImageDimensions ( 32 32 ) ImageClearColor ( 1 1 1 ) ImageMask ( 32 32 # width, height 4 # rowBytes BigEndian # bitOrder 0x000000000FFFF8000FFFF8000FFFF800 0x0FFFF8000FFFF8000FFFF8000FFFFFE0 0x0FFFFFE00FFFFFE00FFFFFE00FFFFFE0 0x0FFFFFE00FFFFFE00FFFFFE00FFFFFE0 0x0FFFFFE00FFFFFE00FFFFFE00FFFFFE0 0x0FFFFFE00FFFFFE00FFFFFE00FFFFFE0 0x0C61FFE00F24FFE00E64FFE00F24FFE0 0x0F24FFE00C61FFE00FFFFFE000000000 ) ) Rotate ( X 0.25 ) Rotate ( Y 0.23 ) Container ( Torus ( 0 0.7 0 0 0 1 1 0 0 0 0 0 0.7 ) Container ( AttributeSet ( ) DiffuseColor ( 0.2 0.9 0.9 ) ) )Image Dimensions Objects
Labels
- ASCII
ImageDimensions
- Binary
imdm
( =0x696D646D
)Data Format
Uns32 width Uns32 heightField descriptions
width
- The preferred width, in pixels, of the displayed portion of an image.
height
- The preferred height, in pixels, of the displayed portion of an image.
Data Size
8Description
An image dimensions object is used to specify the height and width of the rectangular portion of an image that is to be displayed. The height and width of an image dimensions object are measured from the upper-left corner of the image to which that image dimensions object is applied. Normally, an image is rasterized before an image dimensions object is applied to it. An image dimensions object may be used together with an image mask: the former may be used to clip an image, and the latter may be used to filter the clipped image.Parent Hierarchy
Data, view hints data.Parent Objects
View hints. An image dimensions object always has a parent object.Child Objects
None.Example
Container ( ViewHints ( ) ImageDimensions ( 32 32 ) ImageMask ( ... ) )Image Clear Color Objects
Labels
- ASCII
ImageClearColor
- Binary
imcc
( =0x696D6363
)Data Format
ColorRGB clearColorField descriptions
clearColor
- The RGB color to be given to the visible background of a model when an image is rendered from that model.
Data Size
4Description
An image clear color object is used to assign color to the background of a model in a rendered image when the model does not itself completely fill that image.Parent Hierarchy
Data, view hints data.Parent Objects
View hints. An image clear color object always has a parent object.Child Objects
None.Example
Container ( ViewHints ( ) ImageDimensions ( ... ) ImageClearColor ( 1 1 1 ) . . . )Unknown Objects
Unknown Text
Labels
- ASCII
UnknownText
- Binary
uktx
( =0x756B7478
)Data Format
String asciiName String contentsField descriptions
asciiName
- The object type of the unknown object, enclosed in double quotation marks.
contents
- The specification (without encapsulation) of the unknown object, enclosed in double quotation marks. Blank space and comments in the original object specification of the unknown object may be omitted when this field is written.
Data Size
sizeof(asciiName) + sizeof(contents)
Description
An unknown text object is used to transport unknown data found in a text file. It is an encapsulated replica of that unknown data. In the usual case, an unknown text object contains an ill-formed object specification. Your file reading program may be designed to transport the data contained in an unknown text object, to validate and convert the data to a specification of a known object, or to discard the data.An unknown text object may occur in a binary file as well as in a text file.
Parent Hierarchy
Shared, shape.Parent Objects
Any object that may have a child object may be a parent object to an unknown text object.Child Objects
None.Example
UnknownText ( "Sphere" # unknown object type "1 0 0 0 1 0 0 0 1 0 0 a" # illegal specification )Unknown Binary
Labels
- ASCII
UnknownBinary
- Binary
ukbn
( =0x756B626E
)Data Format
Int32 objectType Uns32 objectSize EndianEnum byteOrder RawData objectData[objectSize]Field descriptions
objectType
- The binary representation of the type of the unknown object.
objectSize
- The size of the unknown object.
byteOrder
- The byte order of the unknown object. The information in this field is needed to transport unknown data between processors and permits parsing endian-specific primitives contained in the object data.
objectData[]
- The specification of the unknown object in the form of raw data.
Data Size
12 + sizeof(objectData)
Description
An unknown binary object is used to transport unknown data found in a binary file. It is an encapsulated replica of that unknown data. In the usual case, an unknown binary object contains an ill-formed object specification. Your file reading program may be designed to transport the data contained in an unknown text object, to validate and convert the data to a specification of a known object, or to discard the data.An unknown binary object may occur in a text file as well as in a binary file.
Parent Hierarchy
Shared, shape.Parent Objects
None.Child Objects
None.Example
UnknownBinary ( 1701605476 4 BigEndian 0x0AB2 )
3D Metafile Reference © Apple Computer, Inc.